# 练习题
# 1、一家商场在举行打折促销，所有商品都进行8
# 折优惠。
# （先给一个变量赋值为原价键盘输入，再计算出8折后的价格）
#

prices = float(input("请输入原价："))
new_prices = prices * 0.8
print(f"给你打八折现在的价格是: {new_prices}")
# 2、针对字符串，‘abcdefghi’, 进行各种字符串运算
#

s = 'abcdefghi'

# 获取字符串长度
print(f"字符串长度: {len(s)}")
print()

# 获取子字符串
print(f"子字符串 (索引1到3): {s[1:4]}")
print()

# 截取
print(f"截取第一个数{s[0]}")
print(f"截取第三个数{s[2]}")
print()

# 字符串拼接
s2 = 'jkl'
print(f"拼接后的字符串: {s + s2}")
print()

# 字符串转大写
print(f"大写字符串: {s.upper()}")
print()

# 字符串替换
print(f"替换后的字符串: {s.replace('a', 'A')}")
print()

# 包含
print(f"a在s里面吗：{'a' in s}")
print(f"100在s里面吗：{'100' in s}")
print()

# 重复字符串
print(f"重复字符串重复3次： {s*3}")
print()


# 3、针对一个列表[2, 4, 6, 15, 8, 9, 12]，进行各种列表操作
#

list1 = [2, 4, 6, 15, 8, 9, 12,2,5,5]

# 访问list1第三个值
print(f"原列表：{list1}")
print(f"访问list1第三个值:{list1[2]}")
print()

# 访问list2的2-5
print(f"原列表：{list1}")
print(f"访问list2的2-5:{list1[1:5]}")
print()

# 访问list1的2-5 步长2
print(f"原列表：{list1}")
print(f"访问list1的2-9:{list1[1:5:2]}")
print()

# 删除指定元素list1的第四个元素
del list1[3]
print(f"没删除前：{list1}")
print(f"删除list1的第四个元素:{list1}")
print()

# 删除list1的第六个值
print(f"没删除前：{list1}")
print(f"删除list1的第四个元素:{list1.pop(5)}12被删除了")
print()

# 按值删除
# 删除遇到的第一个5
print(f"没删除前：{list1}")
list1.remove(5)
print(f"删除遇到的第一个5{list1}")
print()
# 全部删除
list1.clear()
print(f"list1已清空:{list1}")
print()

# 修改
list1 = [2, 4, 6, 15, 8, 9, 12,2,5,5]
# 把list1的第六个值改为9
print(f"原列表：{list1}")
list1[6] = 9
print(f"把list1的第7个值改为9:{list1}")
print()

# 查找
print(f"a在list1里面吗：{'a' in list1}")
print(f"100在list1里面吗：{'100' in list1}")
print()

# 排序
# 升序
print(f"原列表：{list1}")
list1.sort()
print(f"升序后:{list1}")
print()

#降序
print(f"原列表：{list1}")
list1.sort(reverse=True)
print(f"降序后:{list1}")
print()

# 倒置
print(f"原列表：{list1}")
list1.reverse()
print(f"倒置后:{list1}")

# 4、针对一个元组（3，6，8，6，2，6，5），进行各种元组操作
#
t1 = (3,6,8,6,2,6,5)
# 全部访问
print(f"查看t1全部内容：{t1}")
print()

# 局部访问
# 访问t1的第5个位置
print(f"原元组：{t1}")
print(f"访问t1的第5个位置：{t1[4]}")
print()

# 访问t1的2-6
print(f"原元组：{t1}")
print(f"访问t1的2-6：{t1[1:6]}")
print()

# 访问t1的2-7步长2
print(f"原元组：{t1}")
print(f"访问t1的2-7步长2  {t1[1:7:2]}")
print()

# 包含
print(f"3在t1中吗  {3 in t1}")
print(f"a在t1中吗  {'a' in t1}")
print()

# 值在元组中的出现次数
# 求1出现的次数
print(f"1在t1中出现的次数  {t1.count(1)}次")

# 值在元组中的索引第一次出现的索引
# 第一个5的索引
index1 = t1.index(5)
print(f"第一个5的索引值为：{t1.index(5)}")


# 5、针对一个字典
# {'name': 'xiaoming'，'age': 18，'sex': 'man'}，进行各种字典操作
#
d1 = {'name': 'xiaoming','age': 18,'sex': 'man'}

# 全部访问
print(f"全部访问：{d1}")
print()

# 局部访问
print(f"局部访问根据name访问：{d1['name']}")
print()

# 操作
# 添加 键不同就是添加
print(f"原字典：{d1}")
d1['sex'] = '男'
print(f"添加后：{d1}")

# 修改 键相同就是修改
print(f"原字典：{d1}")
d1['age'] = 9
print(f"修改后：{d1}")

# 删除
# 按键删除
print(f"原字典：{d1}")
d1.pop('age')
print(f"删除后：{d1}")

# 删除最后一个
print(f"原字典：{d1}")
d1.popitem()
print(f"删除最后一个：{d1}")

# 全部删除
print(f"原字典：{d1}")
d1.clear()
print(f"全部删除：{d1}")


# 查
d1 = {'name':'xiaoming','age':8,'class':3}
# 返回所有的键
print(f"返回所有的键{list(d1.keys())}")
# 返回所有的值
print(f"返回所有的值{list(d1.values())}")


# 6、针对一个集合 {3, 7, 8, 4, 5}，进行各种集合操作

# 创建集合
s = {3, 7, 8, 4, 5}

# 全部访问
print(f"集合中的所有元素: {s}")

# 操作
# 添加
s.add(9)
print(f"添加元素后的集合: {s}")

# 删除
# 删除一个
removed_element = s.pop()
print(f"随机删除一个元素后的集合: {s}, 被删除的元素: {removed_element}")

# 按值删除
s.remove(7)  # 使用 remove() 方法删除元素，如果元素不存在会抛出异常
print(f"按值删除元素后的集合: {s}")

# 全部删除
s.clear()
print(f"全部删除后的集合: {s}")

# 重新创建集合以便继续其他操作
s = {3, 7, 8, 4, 5}

# 交集
s2 = {4, 5, 6, 7}
intersection = s.intersection(s2)
print(f"集合的交集: {intersection}")

# 并集
union = s.union(s2)
print(f"集合的并集: {union}")


# 7、系统函数针对列表，元组，字典，集合各操作一次
# 列表
lst = [2, 4, 6, 15, 8, 9, 12]
print(f"列表的最大值: {max(lst)}")
print(f"列表的最小值: {min(lst)}")
print(f"列表的长度: {len(lst)}")
print(f"列表的总和: {sum(lst)}")

# 元组
tup = (3, 6, 8, 6, 2, 6, 5)
print(f"元组的最大值: {max(tup)}")
print(f"元组的最小值: {min(tup)}")
print(f"元组的长度: {len(tup)}")

# 字典
dct = {'name': 'xiaoming', 'age': 18, 'sex': 'man'}
print(f"字典的键列表: {list(dct.keys())}")
print(f"字典的值列表: {list(dct.values())}")
print(f"字典的键值对列表: {list(dct.items())}")
print(f"字典的长度: {len(dct)}")

# 集合
s = {3, 7, 8, 4, 5}
print(f"集合的长度: {len(s)}")
print(f"集合的任意一个元素: {s.pop()}")  # pop() 方法会随机移除并返回一个元素
